﻿using ELTE.SEM.Common;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Configuration;

namespace ELTE.SEM.Data.ViewModels
{
    public class RegisterViewModel : ViewModelBase
    {
        [Required(ErrorMessage = "Felhasználói név megadása kötelező")]
        [Display(Name="Felhasználónév")]
        public String Name { get; set; }

        [Required(ErrorMessage = "Jelszó megadása kötelező")]
        [Display(Name="Jelszó")]
        public String Password { get; set; }

        public override IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            List<ValidationResult> results = new List<ValidationResult>();
            IEnumerable<ValidationResult> baseResults = base.Validate(validationContext);
            if (baseResults != null)
            {
                foreach (ValidationResult item in baseResults)
                {
                    results.Add(item);
                }
            }
            //check for password strength
            CustomValidator validator = new CustomValidator();
            short minLength = short.Parse(ConfigurationManager.AppSettings["registration_MinPasswordLength"]);
            short minNumberCount = short.Parse(ConfigurationManager.AppSettings["registration_MinNumberCount"]);
            short minSpecialCharCount = short.Parse(ConfigurationManager.AppSettings["registration_MinSpecialCharacterCount"]);
            if (!validator.PasswordStrengthCheck(this.Password, minLength, minNumberCount, minSpecialCharCount))
            {
                results.Add(new ValidationResult(
                    String.Format("Jelszó erőssége nem megfelelő. A jelszó minimális hossza {0} karakter, tartalmaznia kell legalább {1} számjegyet és {2} speciális karaktert",
                    minLength, minNumberCount, minSpecialCharCount),
                    new List<string> { "Password" }));
            }
            return results;
        }
    }
}
